perm filename KRNLS1.PAS[S1,ALS] blob sn#365869 filedate 1978-12-27 generic text, type T, neo UTF8
(*$A+,B-*)			(*PCPASC OPTIONS*)
PROGRAM KRNLS1(OUTPUT);

CONST
MAXKERNEL =  7;
CN =  50; (*CONSTANT USED IN LOOP CONTROL*)
CM =  50; (*CONSTANT USED IN LOOP CONTROL*)

TYPE
TIME =  INTEGER;
STR4 =  ARRAY [1..4] OF CHAR;

VAR
KI, K, IJK, N, M, I :  INTEGER;
R, S, T :  REAL;
U, V, W, Z, X, A, Y, G :  ARRAY [1..200] OF REAL;
KSTART, KEND :  ARRAY [1..MAXKERNEL] OF TIME;
TMPTIME, OVERHEAD :  TIME;
FUNCTION RDTIME :  TIME;

BEGIN
RDTIME := 3141593;
END;
PROCEDURE INIT;

BEGIN

WRITELN(OUTPUT);
WRITELN(OUTPUT,' KERNEL',' ':4,'# OF CYCLES');
WRITELN(OUTPUT);

TMPTIME := RDTIME;
OVERHEAD := RDTIME - TMPTIME;

T := 1.0;
R := 1.002;
S := 2.003;
FOR K := 1 TO 200 DO
    BEGIN
    W[K] := R;
    V[K] := S;
    Z[K] := R+S;
    X[K] := R*S;
    U[K] := R/S;
    Y[K] := U[K];
    G[K] := R;
    A[K] := (S+T)/S;
    R := R+S;
    S := S+T;
    END;

END;
PROCEDURE WRTTIME (KID :  STR4;  T :  TIME);

BEGIN

WRITELN(OUTPUT,' ',KID,' ':6,T:8);

END;
PROCEDURE K1;

BEGIN

I := 10;
R := 1.19;
S := 1.31;
T := 1.29;
KSTART[1] := RDTIME;
FOR K := 1 TO 100 DO
    BEGIN
    KI := K+I;
    U[K] := T+V[K]*(R*W[KI]+S*W[KI+1]);
    END;
KEND[1] := RDTIME;
WRTTIME('K1  ',KEND[1]-KSTART[1]-OVERHEAD);

END;
PROCEDURE K2;

BEGIN

S := 0;
KSTART[2] := RDTIME;
K := 1;
WHILE K <= 146 DO
    BEGIN
    S := S +Z[K  ]*X[K  ] +Z[K+1]*X[K+1]
           +Z[K+2]*X[K+2] +Z[K+3]*X[K+3]
           +Z[K+4]*X[K+4];
    K:=K+5;
    END;
KEND[2] := RDTIME;
WRTTIME('K2  ',KEND[2]-KSTART[2]-OVERHEAD);

END;
PROCEDURE K3;

BEGIN

S := 0;
KSTART[3] := RDTIME;
IJK := 1;
FOR K := IJK TO CN DO
    S := S+Z[K]*X[K];
KEND[3] := RDTIME;
WRTTIME('K3  ',KEND[3]-KSTART[3]-OVERHEAD);

END;
PROCEDURE K5;

BEGIN

IJK := CM-2;
KSTART[5] := RDTIME;
I := 2;
WHILE I <= IJK DO
    BEGIN
    X[I  ] := A[I  ]*(Y[I  ]-X[I-1]);
    X[I+1] := A[I+1]*(Y[I+1]-X[I  ]);
    X[I+2] := A[I+2]*(Y[I+2]-X[I+1]);
    I := I+3;
    END;
(*TIM RUDY DID NOT ASSEMBLY-CODE THIS PART SO DON'T PASCAL-CODE IT ...
FOR I := I TO CM DO
    X[I  ] := A[I ]*(Y[I  ]-X[I-1]);
...*)
KEND[5] := RDTIME;
WRTTIME('K5  ',KEND[5]-KSTART[5]-OVERHEAD);

END;
PROCEDURE K7;

BEGIN

R := 0.11;
T := 0.23;
KSTART[7] := RDTIME;
FOR M := 1 TO 40 DO
    W[M] :=      U[M  ] + R*(A[M  ] + R*G[M  ])
            +T*( U[M+3] + R*(U[M+2] + R*U[M+1])
            +T*( U[M+6] + R*(U[M+5] + R*U[M+4])));
KEND[7] := RDTIME;
WRTTIME('K7  ',KEND[7]-KSTART[7]-OVERHEAD);

END;
BEGIN

INIT;
K1;
K2;
K3;
K5;
K7;

END.